home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Magazin: Amiga-CD 1997 May & June
/
Amiga-CD 1997 #5-6.iso
/
emulatoren
/
frodov2.4
/
src
/
iec.h
< prev
next >
Wrap
C/C++ Source or Header
|
1996-01-29
|
4KB
|
122 lines
/*
* IEC.h - IEC-Bus-Routinen, 1541-Emulation
*
* Copyright (C) 1994-1996 by Christian Bauer
*/
#ifndef IEC_H
#define IEC_H
#include <exec/types.h>
// C64-Status-Codes
#define ST_OK 0 // Alles klar
#define ST_READ_TIMEOUT 0x02 // Timeout beim Lesen
#define ST_TIMEOUT 0x03 // Timeout
#define ST_EOF 0x40 // End of file
// 1541-Fehlercodes
enum {
ERR_OK, // 00 OK
ERR_WRITEERROR, // 25 WRITE ERROR
ERR_WRITEPROTECT, // 26 WRITE PROTECT ON
ERR_SYNTAX30, // 30 SYNTAX ERROR (Unbekannter Befehl)
ERR_SYNTAX33, // 33 SYNTAX ERROR (Wildcards beim Schreiben)
ERR_WRITEFILEOPEN, // 60 WRITE FILE OPEN
ERR_FILENOTOPEN, // 61 FILE NOT OPEN
ERR_FILENOTFOUND, // 62 FILE NOT FOUND
ERR_ILLEGALTS, // 67 ILLEGAL TRACK OR SECTOR
ERR_NOCHANNEL, // 70 NO CHANNEL
ERR_STARTUP, // 73 Einschaltmeldung
};
// Maximale Länge eines Dateinamens
#define NAMEBUF_LENGTH 256
// Struktur der BAM
typedef struct {
UBYTE dir_track; // Spur...
UBYTE dir_sector; // ...und Sektor des ersten Directory-Blocks
BYTE fmt_type; // Format-Typ
BYTE pad0;
UBYTE bitmap[4*35]; // Belegung der Sektoren
UBYTE disk_name[18]; // Name des Diskette
UBYTE id[2]; // ID der Diskette
BYTE pad1;
UBYTE fmt_char[2]; // Formatzeichen
BYTE pad2[4];
BYTE pad3[85];
} BAM;
// Struktur eines Verzeichniseintrags
typedef struct {
UBYTE type; // Dateityp
UBYTE track; // Spur...
UBYTE sector; // ...und Sektor des ersten Datenblocks
UBYTE name[16]; // Dateiname
UBYTE side_track; // Spur...
UBYTE side_sector; // ...und Sektor des ersten Side-Sektors
UBYTE rec_len; // Recordlänge
BYTE pad0[4];
UBYTE ovr_track; // Spur...
UBYTE ovr_sector; // ...und Sektor beim Überschreiben
UBYTE num_blocks_l; // Anzahl Blocks, LSB
UBYTE num_blocks_h; // Anzahl Blocks, MSB
BYTE pad1[2];
} DirEntry;
// Struktur eines Verzeichnisblocks
typedef struct {
UBYTE next_track;
UBYTE next_sector;
DirEntry entry[8];
} Directory;
// Datenstruktur für ein Laufwerk
typedef struct {
char type; // Laufwerks-Typ
char read_char; // Byte-Puffer zum Lesen aus Dateien
char name_length; // Bisher empfangene Länge des Dateinamens
char error_length; // Restliche Länge der Fehlermeldung
char *name_ptr; // Zeiger in Dateinamen, für Open/IECOut
char *error_ptr; // Zeiger in Fehlermeldung
BPTR lock; // Lock des Verzeichnisses des Laufwerks
// bzw. Handle der .d64-Datei
void (*init_proc)(); // Initialisieren
void (*exit_proc)(); // Beenden
int (*open_proc)(); // Kanal öffnen
int (*close_proc)(); // Kanal schließen
int (*read_proc)(); // Byte lesen
int (*write_proc)(); // Byte schreiben
char cmd_buffer[44]; // Eingabepuffer für Kommandos
int cmd_length; // Länge des bisher empfangenen Kommandos
BPTR handle[16]; // FS: FileHandles für alle 16 Kanäle
char chan_mode[16]; // D64: Kanalmodus
char chan_buf_num[16]; // D64: Nummer des Puffers des Kanals (für Direktzugriffskanäle)
char *chan_buf[16]; // D64: Zeiger auf Puffer des Kanals
char *buf_ptr[16]; // D64: Aktuelle Position im Puffer
int buf_len[16]; // D64: Restliche Anzahl Bytes im Puffer
char *ram; // D64: 2KB RAM für das Laufwerk
char buf_free[4]; // D64: Puffer 0..3 frei?
int image_header; // D64: Länge des Headers der Image-Datei (.d64: 0, .x64: 64)
BAM *BAM; // D64: Zeiger auf Puffer für BAM (Puffer 4, $700)
Directory dir; // D64: Temporärer Puffer für Directory-Blocks
} DriveData;
// Prefs: '/' in Dateinamen konvertieren?
extern WORD MapSlash;
// Exportierte Funktionen
extern void SetError(DriveData *drive, int error);
#endif